// 给你一个以字符串表示的非负整数 num 和一个整数 k ，移除这个数中的 k 位数字，使得剩下的数字最小。
// 请你以字符串形式返回这个最小的数字。
 
// 示例 1 ：
// 输入：num = "1432219", k = 3
// 输出："1219"
// 解释：移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。

// 示例 2 ：
// 输入：num = "10200", k = 1
// 输出："200"
// 解释：移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。

// 示例 3 ：
// 输入：num = "10", k = 2
// 输出："0"
// 解释：从原数字移除所有的数字，剩余为空就是 0 。

// 提示：
//     1 <= k <= num.length <= 105
//     num 仅由若干位数字（0 - 9）组成
//     除了 0 本身之外，num 不含任何前导零
/////////////利用单调栈
/**
 * @param {string} num
 * @param {number} k
 * @return {string}
 */
var removeKdigits = function(num, k) {
    if(num.length === 1) return "0";
    let stack = [];
    for(let i = 0; i < num.length; i++) {
        let v = num[i];
        ///判断当前值是否比已经有的值大，大的话不放入栈中，小的话删除比它大的
        while(k > 0 && stack.length > 0 && stack[stack.length - 1] > v) {
            stack.pop();
            k--;
        }
        ////如果当前值不是"0" 或者 当前栈中有元素的情况下push。
        ////也就是如果空栈，当前值又为0则不放入
        if (v !== '0' || stack.length > 0) {
            stack.push(v);
        }
    }
    while(k > 0) {
        stack.pop();
        k--;
    }
    return stack.length === 0? "0": stack.join('');
};
console.log(removeKdigits("10200", 1));
